#include "../../common/commonbase.h"

namespace NET{
    struct clientReturnStruct{
        int code;
        std::string msg;
        Json::Value data;
    };

    const int CLIENT_ERROR_SUCCESS = 0;
    const int CLIENT_ERROR_UNLOGIN = 201;
    const int CLIENT_ERROR_SEND_FAILED = 202;

    class UserModel{
        public:
            UserModel();
            ~UserModel();

            // 主动发起-注册
            clientReturnStruct registe(std::string username, std::string password);
            // 主动发起-登陆
            clientReturnStruct login(int uid, std::string password);
            // 主动发起-添加好友
            clientReturnStruct addFriend(int beuid);
            // 主动发起-好友列表
            clientReturnStruct friendList();
            // 主动发起-单聊
            clientReturnStruct chat(int beuid, std::string msg);
            
            // 被动接受消息-此函数处理被动接受到的消息，转发到各个对应的callback
            std::string onRecvMsg(std::string *route);

            // 被动接受-登陆的回调
            void loginCallback(Json::Value root);
            // 被动接受-添加好友的回调
            void addFriendCallback(Json::Value root);
            // 被动接受-好友列表的回调
            void friendListCallback(Json::Value root);
            // 被动接受-单聊的回调，也就是chat函数的执行异步返回
            void chatCallback(Json::Value root);
            // 被动接受-收到单聊的回调，也就是别人通过chat发给我的消息
            void recvChatCallback(Json::Value root);
            // 被动接受-注册的回调
            void registeCallback(Json::Value root);

        public:
            int uid;
            int isDebug;
            
        private:
            clientReturnStruct _echoClient(int code, std::string msg = "", Json::Value data = 
            "");
        private:
            ClientNet *conn;
    };
}